package com.sgj.common.vo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.util.CollectionUtils;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * 订单确认页传输数据
 * @Author: Guoji Shen
 * @Date: 2021/9/23 13:25
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class OrderConfirmVo {

    /**
     * 收货地址信息
     */
    private List<MemberAddressVo> address;

    /**
     * 所有选中的购物项
     */
    private List<OrderItemVo> items;

    /**
     * TODO 发票信息
     */
    private String invoice;

    /**
     * 优惠信息(目前只弄一个积分信息)
     */
    private Integer integration;

    /**
     * 订单总价
     */
    private BigDecimal totalPrice;

    /**
     * 应付总价
     */
    private BigDecimal payPrice;

    /**
     * 订单防止重复提交令牌
     */
    private String orderToken;

    /**
     * 订单数量
     */
    private Integer count;

    /**
     * 库存
     */
    private Map<Long, Boolean> stocks;

    public Integer getCount() {
        Integer count = 0;
        if (!CollectionUtils.isEmpty(items)) {
            for (OrderItemVo item : items) {
                count++;
            }
        }
        return count;
    }

    public BigDecimal getTotalPrice() {
        BigDecimal sum = BigDecimal.ZERO;
        if (!CollectionUtils.isEmpty(items)) {
            for (OrderItemVo item : items) {
                BigDecimal multiply = item.getPrice().multiply(new BigDecimal(item.getCount().toString()));
                sum = sum.add(multiply);
            }
        }
        return sum;
    }

    public BigDecimal getPayPrice() {
        // 获取用户积分
        Integer integration = Objects.isNull(getIntegration()) ? 0 : getIntegration();
        // 每100积分可折扣1元
        BigDecimal totalPrice = Objects.isNull(getTotalPrice()) ? BigDecimal.ZERO : getTotalPrice();
        // 计算应付价格
        BigDecimal finalPrice = totalPrice.subtract(new BigDecimal(integration * 0.01));
        return finalPrice;
    }


    @Data
    public static class OrderItemVo {

        /**
         * 商品ID
         */
        private Long skuId;

        /**
         * 商品标题
         */
        private String title;

        /**
         * 商品图片
         */
        private String image;

        /**
         * 商品套餐信息
         */
        private List<String> skuAttr;

        /**
         * 商品价格
         */
        private BigDecimal price;

        /**
         * 商品数量
         */
        private Integer count;

        /**
         * 总价
         */
        private BigDecimal totalPrice;

        /**
         * 货物重量
         */
        private BigDecimal weight;
    }
}